/**
 * 验证手机号
 * @param {String} value - 手机号
 * @returns {Boolean}
 */
export function isPhone(value) {
  return /^1[3-9]\d{9}$/.test(value)
}

/**
 * 格式化手机号
 * @param {String} value - 手机号
 * @returns {Boolean}
 */
export function formatPhone(value) {
   if (!value || value.length !== 11) return value;
  return value.slice(0, 3) + '****' + value.slice(7);
}

/**
 * 验证邮箱
 * @param {String} value - 邮箱
 * @returns {Boolean}
 */
export function isEmail(value) {
  return /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/.test(value)
}

/**
 * 验证身份证号
 * @param {String} value - 身份证号
 * @returns {Boolean}
 */
export function isIdCard(value) {
  return /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(value)
}

/**
 * 验证金额
 * @param {String|Number} value - 金额
 * @returns {Boolean}
 */
export function isMoney(value) {
  return /^(([1-9]\d*)|\d)(\.\d{1,2})?$/.test(value)
}

/**
 * 验证URL
 * @param {String} value - URL
 * @returns {Boolean}
 */
export function isUrl(value) {
  return /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/.test(value)
}

/**
 * 格式化金额并验证
 * @param {String|Number} value - 要格式化的金额
 * @returns {Object} { valid: 是否有效, value: 格式化后的值或null }
 */
export function formatMoney(value) {
  // 处理空值
  if (!value && value !== 0) {
    return { valid: true, value: null };
  }
  
  // 转为字符串处理
  let strValue = String(value);
  
  // 只允许数字和小数点
  if (!/^[0-9.]+$/.test(strValue)) {
    strValue = strValue.replace(/[^0-9.]/g, '');
  }
  
  // 处理多个小数点
  if ((strValue.match(/\./g) || []).length > 1) {
    strValue = strValue.substring(0, strValue.lastIndexOf('.'));
  }
  
  // 处理整数部分最多4位
  let intPart, decPart;
  if (strValue.includes('.')) {
    const parts = strValue.split('.');
    intPart = parts[0];
    decPart = parts[1];
  } else {
    intPart = strValue;
    decPart = '';
  }
  
  // 截取整数部分最多4位
  if (intPart.length > 4) {
    intPart = intPart.substring(0, 4);
  }
  
  // 重新组合整数和小数部分
  strValue = decPart ? `${intPart}.${decPart}` : intPart;
  
  // 处理小数位数
  if (strValue.includes('.')) {
    const parts = strValue.split('.');
    if (parts[1].length > 2) {
      strValue = parts[0] + '.' + parts[1].substring(0, 2);
    }
  }
  
  // 判断是否是有效金额
  const isValid = strValue !== '' && isMoney(strValue);
  
  // 返回结果
  if (isValid) {
    return { valid: true, value: strValue };
  } else if (strValue === '') {
    return { valid: true, value: null };
  } else {
    return { valid: false, value: null };
  }
} 